<?php

/**
 * 
 */
class Model_Mapper_Local extends App_Model_Mapper_Abstract {

    /**
     * 
     * @access public
     * @return void
     */
    public function save() {
        try {

            $dbLocal = App_Model_DbTable_Factory::get('Local');

            $adapter = $dbLocal->getAdapter();

            $adapter->beginTransaction();

            $result = parent::_simpleSave($dbLocal);

           // $this->atualizaDestaque($result, $dbLocal);
            
            $adapterHttp = new Zend_File_Transfer_Adapter_Http(array('useByteString' => true));

            $files = $adapterHttp->getFileInfo('imagem');

            $success = 0;

            foreach ($files as $key => $file) {

                if ($adapterHttp->isValid($key)) {

                    $success++;

                    $indice = preg_replace('/[a-zA-Z_]/', '', $key);

                    $thumb = PhpThumb_PhpThumbFactory::create($file['tmp_name']);
                    //Esta falando que ele e do tipo topo então o tamanho fica no horizontal
//                    if($key == 2 ){
//                        $thumb->adaptiveResize(1070, 110);
//                    }else {
//                        $thumb->adaptiveResize(700, 650);
//                    }

                    $data = array(
                        'img_arquivo' => $thumb->getImageAsString(),
                        'img_nome' => $file['name'],
                        'img_tipo' => $file['type'],
                        'img_tamanho' => $file['size']
                    );

                    $dbImagem = App_Model_DbTable_Factory::get('Imagem');
//                    
                    if ($indice >= 2) {
                        $data['lcl_id'] = $result;

                        $dbImagem->insert($data);
                    } else
                    if (empty($this->_data['img_id'][$indice])) {

                        $data['lcl_id'] = $result;

                        $dbImagem->insert($data);
                    } else {

                        $where = array('img_id = ?' => $this->_data['img_id'][$indice]);

                        $dbImagem->update($data, $where);
                    }
                }
            }

            if (empty($this->_data['lcl_id']) && 5 != $success)
                throw new Exception('Selecione 5 arquivos');

            $adapter->commit();

            return $result;
        } catch (Exception $e) {

            $adapter->rollBack();

            $this->_message->addMessage($e->getMessage(), App_Message::ERROR);
        }

        return false;
    }

    /**
     * 
     * @access public
     * @return bool
     */
    public function delete() {
        try {

            $dbLocal = App_Model_DbTable_Factory::get('Local');

            $where = array('lcl_id = ?' => $this->_data['id']);

            $count = $dbLocal->delete($where);

            return !empty($count);
        } catch (Exception $e) {

            return false;
        }
    }

    /**
     * 
     * @access public
     * @return Zend_Db_Table_Rowset
     */
    public function fetchAll($filter = array()) {
        $dbRegiao = App_Model_DbTable_Factory::get('Regiao');
        $dbLocal = App_Model_DbTable_Factory::get('Local');
        $dbImagem = App_Model_DbTable_Factory::get('Imagem');

        $selectImagem = $dbImagem->select()
                ->from(array('i' => $dbImagem), array('min(`i`.`img_id`)'))
                ->where("lcl_id = l.lcl_id ");

        $select = $dbLocal->select()
                ->setIntegrityCheck(false)
                ->from(array('l' => $dbLocal), array('lcl_destaque','lcl_id', 'lcl_titulo', 'lcl_leiamais', 'lcl_descricao', '(' . $selectImagem . ') as img_id'))
                ->join(array('r' => $dbRegiao), 'r.reg_id = l.reg_id', array('reg_titulo'));
        
        if (!empty($filter['reg_id'])) {
            $select->where("r.reg_id = ? ", $filter['reg_id']);
        }
        
        if (!empty($filter['lcl_id'])) {
            $select->where("l.lcl_id = ? ", $filter['lcl_id']);
        }
        
        if(!empty($filter['lcl_destaque'])){
            $select->where("l.lcl_destaque = ? ", 1);
        }
        $rows = $dbLocal->fetchAll($select);
//        echo "<pre>";
//        print_r($rows->toArray());
//        die("</pre>");
        return $rows;
    }

    /**
     * 
     * @access public
     * @return Zend_Db_Table_Row
     */
    public function fetchRow() {
        $dbLocal = App_Model_DbTable_Factory::get('Local');

        $where = array('lcl_id = ?' => $this->_data['id']);

        return $dbLocal->fetchRow($where);
    }

    /**
     * 
     * @access public
     * @return Zend_Db_Table_Rowset
     */
    public function fetchTree() {
        $dbLocal = App_Model_DbTable_Factory::get('Local');

        $select = $dbLocal->select()
                ->from(
                        array('l' => $dbLocal), array('lcl_id', 'lcl_titulo')
                )
                ->where('reg_id = ?', $this->_data['reg_id']);

        $rows = $dbLocal->fetchAll($select);

        return $rows;
    }
    
    public function cidadeDestaque(){
        return $this->fetchAll(array('destaque' => 1));
    }

    /**
     * Atualiza da tabale de local para deixar apenas um em destaque;
     * @param int $id Id do local que esta sendo gravado ou atualizado, para não alterar ele 
     * @param Model_DbTable_Local $dbLocal Tabela que vai fazer a atualização 
     * @throws Exception Caso tenha algum tipo de erro então retorna ele
     */
    private function atualizaDestaque($id, $dbLocal) {
        try {
            if ($this->_data['lcl_destaque'] == "1") {

                $where = array('lcl_id <> ? ' => $id);

                $data = $dbLocal->cleanData(array('lcl_destaque' => '0'));

                $dbLocal->update($data, $where);
            }
        } catch (Exception $erro) {
            throw $erro;
        }
    }

}